#!/bin/bash
# AES 加密/解密 速度快, 安全性中高
# RSA 加密/解密 速度慢, 但安全性高

function old_AES_RSA()
{
    # 1.加密
    # 生成随机对称密钥 (AES-256-CBC)
    openssl rand -base64 32 > aes_key.bin

    # 1.1先用 RSA 公钥加密对称密钥
    openssl rsautl -encrypt -inkey public_key.pem -pubin -in aes_key.bin -out aes_key.bin.enc
    # 1.2在用 AES 对称加密文件
    openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.aes -pass file:aes_key.bin

    # 2.解密
    # 2.1 先用 RSA 私钥解密对称密钥
    openssl rsautl -decrypt -inkey private_key.pem -in aes_key.bin.enc -out aes_key.bin.decrypted
    # 2.2 再用 AES 密钥解密文件：
    openssl enc -d -aes-256-cbc -in file.txt.aes -out file.txt.decrypted -pass file:aes_key.bin.decrypted
}

function now_AES_RSA()
{
    # 1.加密
    # 生成随机对称密钥 (AES-256-CBC)
    openssl rand -out aes_key.bin 32

    # 1.1先用 RSA 公钥加密对称密钥
    openssl pkeyutl -encrypt -inkey public_key.pem -pubin -in aes_key.bin -out aes_key.bin.enc
    # 1.2在用 AES 对称加密文件
    openssl enc -aes-256-cbc -salt -pbkdf2 -in file.txt -out file.txt.aes -pass file:aes_key.bin

    # 2.解密
    # 2.1 先用 RSA 私钥解密对称密钥
    openssl pkeyutl -decrypt -inkey private_key.pem -in aes_key.bin.enc -out aes_key.bin.decrypted
    # 2.2 再用 AES 密钥解密文件：
    openssl enc -d -aes-256-cbc -pbkdf2 -in file.txt.aes -out file.txt.decrypted -pass file:aes_key.bin.decrypted
}

old_AES_RSA
now_AES_RSA